home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume22 / et / part03 < prev    next >
Encoding:
Internet Message Format  |  1990-06-07  |  51.7 KB

  1. Subject:  v22i024:  Error table compiler and library, Part03/03
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 25b07397 dbb7fe23 2b216df9 c84080db
  5.  
  6. Submitted-by: "Jonathan I. Kamens" <jik@pit-manager.mit.edu>
  7. Posting-number: Volume 22, Issue 24
  8. Archive-name: et/part03
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 3 (of 3)."
  17. # Contents:  texinfo.tex.1
  18. # Wrapped by rsalz@litchi.bbn.com on Mon May  7 16:40:36 1990
  19. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  20. if test -f 'texinfo.tex.1' -a "${1}" != "-c" ; then 
  21.   echo shar: Will not clobber existing file \"'texinfo.tex.1'\"
  22. else
  23. echo shar: Extracting \"'texinfo.tex.1'\" \(49773 characters\)
  24. sed "s/^X//" >'texinfo.tex.1' <<'END_OF_FILE'
  25. X%% TeX macros to handle texinfo files
  26. X
  27. X%   Copyright (C) 1985, 1986, 1988 Richard M. Stallman
  28. X
  29. X%               NO WARRANTY
  30. X
  31. X%  BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
  32. X%NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
  33. X%WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
  34. X%RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
  35. X%WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
  36. X%BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  37. X%FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
  38. X%AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
  39. X%DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
  40. X%CORRECTION.
  41. X
  42. X% IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
  43. X%STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
  44. X%WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
  45. X%LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
  46. X%OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
  47. X%USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
  48. X%DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
  49. X%A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
  50. X%PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
  51. X%DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
  52. X
  53. X%        GENERAL PUBLIC LICENSE TO COPY
  54. X
  55. X%  1. You may copy and distribute verbatim copies of this source file
  56. X%as you receive it, in any medium, provided that you conspicuously
  57. X%and appropriately publish on each copy a valid copyright notice
  58. X%"Copyright (C) 1986 Richard M. Stallman"; and include
  59. X%following the copyright notice a verbatim copy of the above disclaimer
  60. X%of warranty and of this License.
  61. X
  62. X%  2. You may modify your copy or copies of this source file or
  63. X%any portion of it, and copy and distribute such modifications under
  64. X%the terms of Paragraph 1 above, provided that you also do the following:
  65. X
  66. X%    a) cause the modified files to carry prominent notices stating
  67. X%    that you changed the files and the date of any change; and
  68. X
  69. X%    b) cause the whole of any work that you distribute or publish,
  70. X%    that in whole or in part contains or is a derivative of this
  71. X%    program or any part thereof, to be licensed at no charge to all
  72. X%    third parties on terms identical to those contained in this
  73. X%    License Agreement (except that you may choose to grant more extensive
  74. X%    warranty protection to some or all third parties, at your option).
  75. X
  76. X%    c) You may charge a distribution fee for the physical act of
  77. X%    transferring a copy, and you may at your option offer warranty
  78. X%    protection in exchange for a fee.
  79. X
  80. X%Mere aggregation of another unrelated program with this program (or its
  81. X%derivative) on a volume of a storage or distribution medium does not bring
  82. X%the other program under the scope of these terms.
  83. X
  84. X%  3. You may copy and distribute this program (or a portion or derivative
  85. X%of it, under Paragraph 2) in object code or executable form under the terms
  86. X%of Paragraphs 1 and 2 above provided that you also do one of the following:
  87. X
  88. X%    a) accompany it with the complete corresponding machine-readable
  89. X%    source code, which must be distributed under the terms of
  90. X%    Paragraphs 1 and 2 above; or,
  91. X
  92. X%    b) accompany it with a written offer, valid for at least three
  93. X%    years, to give any third party free (except for a nominal
  94. X%    shipping charge) a complete machine-readable copy of the
  95. X%    corresponding source code, to be distributed under the terms of
  96. X%    Paragraphs 1 and 2 above; or,
  97. X
  98. X%    c) accompany it with the information you received as to where the
  99. X%    corresponding source code may be obtained.  (This alternative is
  100. X%    allowed only for noncommercial distribution and only if you
  101. X%    received the program in object code or executable form alone.)
  102. X
  103. X%For an executable file, complete source code means all the source code for
  104. X%all modules it contains; but, as a special exception, it need not include
  105. X%source code for modules which are standard libraries that accompany the
  106. X%operating system on which the executable file runs.
  107. X
  108. X%  4. You may not copy, sublicense, distribute or transfer this program
  109. X%except as expressly provided under this License Agreement.  Any attempt
  110. X%otherwise to copy, sublicense, distribute or transfer this program is void and
  111. X%your rights to use the program under this License agreement shall be
  112. X%automatically terminated.  However, parties who have received computer
  113. X%software programs from you with this License Agreement will not have
  114. X%their licenses terminated so long as such parties remain in full compliance.
  115. X
  116. X%  5. If you wish to incorporate parts of this program into other free
  117. X%programs whose distribution conditions are different, write to the Free
  118. X%Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
  119. X%worked out a simple rule that can be stated here, but we will often permit
  120. X%this.  We will be guided by the two goals of preserving the free status of
  121. X%all derivatives of our free software and of promoting the sharing and reuse of
  122. X%software.
  123. X
  124. X%In other words, you are welcome to use, share and improve this program.
  125. X%You are forbidden to forbid anyone else to use, share and improve
  126. X%what you give them.   Help stamp out software-hoarding!
  127. X
  128. X\def\texinfoversion{1.18}
  129. X\message{Loading texinfo package [Version \texinfoversion]:}
  130. X\message{}
  131. X
  132. X% Save some parts of plain tex whose names we will redefine.
  133. X
  134. X\let\ptexlbrace=\{
  135. X\let\ptexrbrace=\}
  136. X\let\ptexdot=\.
  137. X\let\ptexstar=\*
  138. X\let\ptexend=\end
  139. X\let\ptexbullet=\bullet
  140. X\let\ptexb=\b
  141. X\let\ptexc=\c
  142. X\let\ptexi=\i
  143. X\let\ptext=\t
  144. X\let\ptexl=\l
  145. X\let\ptexL=\L
  146. X
  147. X\def\tie{\penalty 10000\ }     % Save plain tex definition of ~.
  148. X
  149. X\message{Basics,}
  150. X\chardef\other=12
  151. X
  152. X\hyphenation{ap-pen-dix}
  153. X\hyphenation{mini-buf-fer mini-buf-fers}
  154. X\hyphenation{eshell}
  155. X
  156. X% Margin to add to right of even pages, to left of odd pages.
  157. X\newdimen \bindingoffset  \bindingoffset=0pt
  158. X\newdimen \normaloffset   \normaloffset=\hoffset
  159. X\newdimen\pagewidth \newdimen\pageheight
  160. X\pagewidth=\hsize \pageheight=\vsize
  161. X
  162. X%---------------------Begin change-----------------------
  163. X%
  164. X% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
  165. X%
  166. X\newdimen\cornerlong \newdimen\cornerthick
  167. X\newdimen \topandbottommargin
  168. X\newdimen \outerhsize \newdimen \outervsize
  169. X\cornerlong=1pc\cornerthick=.3pt    % These set size of cropmarks
  170. X\outerhsize=7in
  171. X\outervsize=9.5in
  172. X\topandbottommargin=.75in
  173. X%
  174. X%---------------------End change-----------------------
  175. X
  176. X% \onepageout takes a vbox as an argument.  Note that \pagecontents
  177. X% does insertions itself, but you have to call it yourself.
  178. X\chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}
  179. X\def\onepageout#1{\hoffset=\normaloffset
  180. X\ifodd\pageno  \advance\hoffset by \bindingoffset
  181. X\else \advance\hoffset by -\bindingoffset\fi
  182. X\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
  183. X {\let\hsize=\pagewidth \makefootline}}
  184. X\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
  185. X
  186. X
  187. X% Here is a modification of the main output routine for Near East Publications
  188. X% This provides right-angle cropmarks at all four corners.
  189. X% The contents of the page are centerlined into the cropmarks,
  190. X% and any desired binding offset is added as an \hskip on either
  191. X% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
  192. X%
  193. X\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
  194. X         \shipout
  195. X         \vbox to \outervsize{\hsize=\outerhsize
  196. X                 \vbox{\line{\ewtop\hfill\ewtop}}
  197. X                 \nointerlineskip
  198. X                 \line{\vbox{\moveleft\cornerthick\nstop}
  199. X                       \hfill
  200. X                       \vbox{\moveright\cornerthick\nstop}}
  201. X                 \vskip \topandbottommargin
  202. X                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
  203. X            \vbox{
  204. X            {\let\hsize=\pagewidth \makeheadline}
  205. X            \pagebody{#1}
  206. X            {\let\hsize=\pagewidth \makefootline}}
  207. X            \ifodd\pageno\else\hskip\bindingoffset\fi}
  208. X         \vskip \topandbottommargin plus1fill minus1fill
  209. X                 \boxmaxdepth\cornerthick
  210. X                 \line{\vbox{\moveleft\cornerthick\nsbot}
  211. X                       \hfill
  212. X                       \vbox{\moveright\cornerthick\nsbot}}
  213. X                 \nointerlineskip
  214. X                 \vbox{\line{\ewbot\hfill\ewbot}}
  215. X    }
  216. X  \advancepageno 
  217. X  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
  218. X%
  219. X% Do @cropmarks to get crop marks
  220. X\def\cropmarks{\let\onepageout=\croppageout }
  221. X
  222. X\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
  223. X{\catcode`\@ =11
  224. X\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
  225. X\dimen@=\dp#1 \unvbox#1
  226. X\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
  227. X\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
  228. X}
  229. X
  230. X%
  231. X% Here are the rules for the cropmarks.  Note that they are
  232. X% offset so that the space between them is truly \outerhsize or \outervsize
  233. X% (P. A. MacKay, 12 November, 1986)
  234. X%
  235. X\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
  236. X\def\nstop{\vbox
  237. X  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
  238. X\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
  239. X\def\nsbot{\vbox
  240. X  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
  241. X
  242. X% Parse an argument, then pass it to #1.
  243. X% The argument can be delimited with [...] or with "..." or braces
  244. X% or it can be a whole line.
  245. X% #1 should be a macro which expects
  246. X% an ordinary undelimited TeX argument.
  247. X
  248. X\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}
  249. X
  250. X\def\parseargx{%
  251. X\ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else%
  252. X\aftergroup \parseargline %
  253. X\fi \endgroup}
  254. X
  255. X{\obeyspaces %
  256. X\gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}}
  257. X
  258. X\gdef\obeyedspace{\ }
  259. X
  260. X\def\parseargline{\begingroup \obeylines \parsearglinex}
  261. X{\obeylines %
  262. X\gdef\parsearglinex #1^^M{\endgroup \next {#1}}}
  263. X
  264. X\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
  265. X
  266. X%% These are used to keep @begin/@end levels from running away
  267. X%% Call \inENV within environments (after a \begingroup)
  268. X\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
  269. X\def\ENVcheck{%
  270. X\ifENV\errmessage{Still within an environment.  Type Return to continue.}
  271. X\endgroup\fi} % This is not perfect, but it should reduce lossage
  272. X
  273. X% @begin foo  is the same as @foo, for now.
  274. X\newhelp\EMsimple{Type <Return> to continue}
  275. X
  276. X\outer\def\begin{\parsearg\beginxxx}
  277. X
  278. X\def\beginxxx #1{%
  279. X\expandafter\ifx\csname #1\endcsname\relax
  280. X{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
  281. X\csname #1\endcsname\fi}
  282. X
  283. X%% @end foo executes the definition of \Efoo.
  284. X%% foo can be delimited by doublequotes or brackets.
  285. X
  286. X\def\end{\parsearg\endxxx}
  287. X
  288. X\def\endxxx #1{%
  289. X\expandafter\ifx\csname E#1\endcsname\relax
  290. X\expandafter\ifx\csname #1\endcsname\relax
  291. X\errmessage{Undefined command @end #1}\else
  292. X\errorE{#1}\fi\fi
  293. X\csname E#1\endcsname}
  294. X\def\errorE#1{
  295. X{\errhelp=\EMsimple \errmessage{@end #1 not within #1 environment}}}
  296. X
  297. X% Single-spacing is done by various environments.
  298. X
  299. X\newskip\singlespaceskip \singlespaceskip = \baselineskip
  300. X\def\singlespace{%
  301. X{\advance \baselineskip by -\singlespaceskip
  302. X\kern \baselineskip}%
  303. X\baselineskip=\singlespaceskip
  304. X}
  305. X
  306. X%% Simple single-character @ commands
  307. X
  308. X% @@ prints an @
  309. X% Kludge this until the fonts are right (grr).
  310. X\def\@{{\sf \char '100}}
  311. X
  312. X% Define @` and @' to be the same as ` and '
  313. X% but suppressing ligatures.
  314. X\def\`{{`}}
  315. X\def\'{{'}}
  316. X
  317. X% Used to generate quoted braces.
  318. X
  319. X\def\mylbrace {{\tt \char '173}}
  320. X\def\myrbrace {{\tt \char '175}}
  321. X\let\{=\mylbrace
  322. X\let\}=\myrbrace
  323. X
  324. X% @: forces normal size whitespace following.
  325. X\def\:{\spacefactor=1000 }
  326. X
  327. X% @* forces a line break.
  328. X\def\*{\hfil\break}
  329. X
  330. X% @. is an end-of-sentence period.
  331. X\def\.{.\spacefactor=3000 }
  332. X
  333. X% @w prevents a word break
  334. X\def\w #1{\hbox{#1}}
  335. X
  336. X% @group ... @end group  forces ... to be all on one page.
  337. X
  338. X\def\group{\begingroup% \inENV ???
  339. X\def \Egroup{\egroup\endgroup}
  340. X\vbox\bgroup}
  341. X
  342. X% @br   forces paragraph break
  343. X
  344. X\let\br = \par
  345. X
  346. X% @dots{}  output some dots
  347. X
  348. X\def\dots{$\ldots$}
  349. X
  350. X% @page    forces the start of a new page
  351. X
  352. X\def\page{\par\vfill\supereject}
  353. X
  354. X% @exdent text....
  355. X% outputs text on separate line in roman font, starting at standard page margin
  356. X
  357. X\def\exdent{\errmessage{@exdent in filled text}}
  358. X  % @lisp, etc, define \exdent locally from \internalexdent
  359. X
  360. X{\obeyspaces
  361. X\gdef\internalexdent{\parsearg\exdentzzz}}
  362. X
  363. X\def\exdentzzz #1{{\advance \leftskip by -\lispnarrowing
  364. X\advance \hsize by -\leftskip
  365. X\advance \hsize by -\rightskip
  366. X\leftline{{\rm#1}}}}
  367. X
  368. X% @include file    insert text of that file as input.
  369. X
  370. X\def\include{\parsearg\includezzz}
  371. X\def\includezzz #1{{\def\thisfile{#1}\input #1
  372. X}}
  373. X
  374. X\def\thisfile{}
  375. X
  376. X% @center line   outputs that line, centered
  377. X
  378. X\def\center{\parsearg\centerzzz}
  379. X\def\centerzzz #1{{\advance\hsize by -\leftskip
  380. X\advance\hsize by -\rightskip
  381. X\centerline{#1}}}
  382. X
  383. X% @sp n   outputs n lines of vertical space
  384. X
  385. X\def\sp{\parsearg\spxxx}
  386. X\def\spxxx #1{\par \vskip #1\baselineskip}
  387. X
  388. X% @comment ...line which is ignored...
  389. X% @c is the same as @comment
  390. X% @ignore ... @end ignore  is another way to write a comment
  391. X
  392. X\def\comment{\parsearg \commentxxx}
  393. X
  394. X\def\commentxxx #1{}
  395. X
  396. X\let\c=\comment
  397. X
  398. X\long\def\ignore #1\end ignore{}
  399. X
  400. X\outer\def\ifset{\parsearg\ifsetxxx}
  401. X
  402. X\def\ifsetxxx #1#2\end ifset{%
  403. X\expandafter\ifx\csname IF#1\endcsname\relax \else #2\fi}
  404. X
  405. X\outer\def\ifclear{\parsearg\ifclearxxx}
  406. X
  407. X\def\ifclearxxx #1#2\end ifclear{%
  408. X\expandafter\ifx\csname IF#1\endcsname\relax #2\fi}
  409. X
  410. X% Some texinfo constructs that are trivial in tex
  411. X
  412. X\def\iftex{}
  413. X\def\Eiftex{}
  414. X\long\def\ifinfo #1\end ifinfo{}
  415. X\long\def\menu #1\end menu{}
  416. X\def\asis#1{#1}
  417. X
  418. X\def\node{\parsearg\nodezzz}
  419. X\def\nodezzz#1{\nodexxx [#1,]}
  420. X\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
  421. X\let\lastnode=\relax
  422. X
  423. X\def\donoderef{\ifx\lastnode\relax\else
  424. X\expandafter\expandafter\expandafter\setref{\lastnode}\fi
  425. X\let\lastnode=\relax}
  426. X
  427. X\def\unnumbnoderef{\ifx\lastnode\relax\else
  428. X\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
  429. X\let\lastnode=\relax}
  430. X
  431. X\let\refill=\relax
  432. X
  433. X\let\setfilename=\comment
  434. X
  435. X\def\inforef #1{\inforefzzz #1,,,,**}
  436. X\def\inforefzzz #1,#2,#3,#4**{See Info file \file{\losespace#3{}}, node `\losespace#1{}'}
  437. X\def\losespace #1{#1}
  438. X
  439. X\message{fonts,}
  440. X
  441. X% Font-change commands.
  442. X
  443. X%% Try out Computer Modern fonts at \magstephalf
  444. X\font\tenrm=cmr10 scaled \magstephalf
  445. X\font\tentt=cmtt10 scaled \magstephalf
  446. X% Instead of cmb10, you many want to use cmbx10.
  447. X% cmbx10 is a prettier font on its own, but cmb10
  448. X% looks better when embedded in a line with cmr10.
  449. X\font\tenbf=cmb10 scaled \magstephalf 
  450. X\font\tenit=cmti10 scaled \magstephalf
  451. X\font\tensl=cmsl10 scaled \magstephalf
  452. X\font\tensf=cmss10 scaled \magstephalf
  453. X\def\li{\sf}
  454. X\font\tensc=cmcsc10 scaled \magstephalf
  455. X
  456. X% Fonts for @defun, etc.
  457. X\font\defbf=cmbx10 scaled \magstep1 %was 1314
  458. X\let\deftt=\tentt
  459. X\def\df{\let\tt=\deftt \defbf}
  460. X
  461. X% Font for title
  462. X\font\titlerm = cmbx10 scaled \magstep5
  463. X
  464. X% Fonts for indices
  465. X\font\indit=cmti9 \font\indrm=cmr9
  466. X\def\indbf{\indrm} \def\indsl{\indit}
  467. X\def\indexfonts{\let\it=\indit \let\sl=\indsl \let\bf=\indbf \let\rm=\indrm}
  468. X
  469. X% Fonts for headings
  470. X\font\chaprm=cmbx10 scaled \magstep3
  471. X\font\chapit=cmti10 scaled \magstep3
  472. X\font\chapsl=cmsl10 scaled \magstep3
  473. X\font\chaptt=cmtt10 scaled \magstep3
  474. X\font\chapsf=cmss10 scaled \magstep3
  475. X\let\chapbf=\chaprm
  476. X
  477. X\font\secrm=cmbx10 scaled \magstep2
  478. X\font\secit=cmti10 scaled \magstep2
  479. X\font\secsl=cmsl10 scaled \magstep2
  480. X\font\sectt=cmtt10 scaled \magstep2
  481. X\font\secsf=cmss10 scaled \magstep2
  482. X\let\secbf=\secrm
  483. X
  484. X\font\ssecrm=cmbx10 scaled \magstep1
  485. X\font\ssecit=cmti10 scaled \magstep1
  486. X\font\ssecsl=cmsl10 scaled \magstep1
  487. X\font\ssectt=cmtt10 scaled \magstep1
  488. X\font\ssecsf=cmss10 scaled \magstep1
  489. X\let\ssecbf=\ssecrm
  490. X
  491. X\def\textfonts{\let\rm=\tenrm\let\it=\tenit\let\sl=\tensl\let\bf=\tenbf%
  492. X\let\sc=\tensc\let\sf=\tensf}
  493. X\def\chapfonts{\let\rm=\chaprm\let\it=\chapit\let\sl=\chapsl\let\bf=\chapbf\let\tt=\chaptt\let\sf=\chapsf}
  494. X\def\secfonts{\let\rm=\secrm\let\it=\secit\let\sl=\secsl\let\bf=\secbf\let\tt=\sectt\let\sf=\secsf}
  495. X\def\subsecfonts{\let\rm=\ssecrm\let\it=\ssecit\let\sl=\ssecsl\let\bf=\ssecbf\let\tt=\ssectt\let\sf=\ssecsf}
  496. X% Count depth in font-changes, for error checks
  497. X\newcount\fontdepth \fontdepth=0
  498. X
  499. X%% Add scribe-like font environments, plus @l for inline lisp (usually sans
  500. X%% serif) and @ii for TeX italic
  501. X
  502. X\def\i#1{{\sl #1}}
  503. X\let\var=\i
  504. X\let\dfn=\i
  505. X\let\emph=\i
  506. X\let\cite=\i
  507. X
  508. X\def\b#1{{\bf #1}}
  509. X\let\strong=\b
  510. X
  511. X\def\t#1{{\tt \rawbackslash \frenchspacing #1}\null}
  512. X\let\ttfont = \t
  513. X\let\kbd=\t
  514. X\let\code=\t
  515. X\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
  516. X\def\key #1{{\tt \uppercase{#1}}\null}
  517. X\def\ctrl #1{{\tt \rawbackslash \hat}#1}
  518. X
  519. X\let\file=\samp
  520. X
  521. X\def\l#1{{\li #1}\null}
  522. X
  523. X\def\r#1{{\rm #1}}
  524. X\def\s#1{{\sc #1}}
  525. X\def\ii#1{{\it #1}}
  526. X
  527. X\def\titlefont#1{{\titlerm #1}}
  528. X
  529. X\def\titlepage{\begingroup \parindent=0pt \hbox{}%
  530. X\let\oldpage=\page
  531. X\def\page{\oldpage \hbox{}}}
  532. X
  533. X\def\Etitlepage{\endgroup\page\HEADINGSon}
  534. X
  535. X% Make altmode in file print out right
  536. X
  537. X\catcode `\^^[=\active \def^^[{$\diamondsuit$}
  538. X
  539. X\message{page headings,}
  540. X
  541. X%%% Set up page headings and footings.
  542. X
  543. X\let\thispage=\folio
  544. X
  545. X\newtoks \evenheadline    % Token sequence for heading line of even pages
  546. X\newtoks \oddheadline     % Token sequence for heading line of odd pages
  547. X\newtoks \evenfootline    % Token sequence for footing line of even pages
  548. X\newtoks \oddfootline     % Token sequence for footing line of odd pages
  549. X
  550. X% Now make Tex use those variables
  551. X\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}}
  552. X\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}}
  553. X
  554. X% Commands to set those variables.
  555. X% For example, this is what  @headings on  does
  556. X% @evenheading @thistitle|@thispage|@thischapter
  557. X% @oddheading @thischapter|@thispage|@thistitle
  558. X% @evenfooting @thisfile||
  559. X% @oddfooting ||@thisfile
  560. X
  561. X\def\evenheading{\parsearg\evenheadingxxx}
  562. X\def\oddheading{\parsearg\oddheadingxxx}
  563. X\def\everyheading{\parsearg\everyheadingxxx}
  564. X
  565. X\def\evenfooting{\parsearg\evenfootingxxx}
  566. X\def\oddfooting{\parsearg\oddfootingxxx}
  567. X\def\everyfooting{\parsearg\everyfootingxxx}
  568. X
  569. X{\catcode`\@=0 %
  570. X
  571. X\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
  572. X\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
  573. X\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  574. X
  575. X\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
  576. X\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
  577. X\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  578. X
  579. X\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
  580. X\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
  581. X\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
  582. X\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  583. X
  584. X\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
  585. X\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
  586. X\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  587. X
  588. X\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
  589. X\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
  590. X\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  591. X
  592. X\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
  593. X\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
  594. X\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
  595. X\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  596. X%
  597. X}% unbind the catcode of @.
  598. X
  599. X% @headings on   turns them on.
  600. X% @headings off  turns them off.
  601. X% By default, they are off.
  602. X
  603. X\def\headings #1 {\csname HEADINGS#1\endcsname}
  604. X
  605. X\def\HEADINGSoff{
  606. X\global\evenheadline={\hfil} \global\evenfootline={\hfil}
  607. X\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
  608. X\HEADINGSoff
  609. X% When we turn headings on, set the page number to 1,
  610. X% Put current file name in lower left corner,
  611. X% Put chapter name on inside top of right hand pages, document
  612. X% title on inside top of left hand pages, and page numbers on outside top
  613. X% edge of all pages.
  614. X\def\HEADINGSon{
  615. X\pagealignmacro
  616. X\global\pageno=1
  617. X\global\evenfootline={\hfil}
  618. X\global\oddfootline={\hfil}
  619. X\global\evenheadline={\line{\folio\hfil\thistitle}}
  620. X\global\oddheadline={\line{\thischapter\hfil\folio}}
  621. X}
  622. X
  623. X% Subroutines used in generating headings
  624. X% Produces Day Month Year style of output.
  625. X\def\today{\number\day\space
  626. X\ifcase\month\or
  627. XJanuary\or February\or March\or April\or May\or June\or
  628. XJuly\or August\or September\or October\or November\or December\fi
  629. X\space\number\year}
  630. X
  631. X% Use this if you want the Month Day, Year style of output.
  632. X%\def\today{\ifcase\month\or
  633. X%January\or February\or March\or April\or May\or June\or
  634. X%July\or August\or September\or October\or November\or December\fi
  635. X%\space\number\day, \number\year}
  636. X
  637. X% @settitle line...  specifies the title of the document, for headings
  638. X% It generates no output of its own
  639. X
  640. X\def\thistitle{No Title}
  641. X\def\settitle{\parsearg\settitlezzz}
  642. X\def\settitlezzz #1{\gdef\thistitle{#1}}
  643. X
  644. X\message{tables,}
  645. X
  646. X% Tables -- @table, @ftable, @item(x), @kitem(x), @xitem(x).
  647. X
  648. X% default indentation of table text
  649. X\newdimen\tableindent \tableindent=.8in
  650. X% default indentation of @itemize and @enumerate text
  651. X\newdimen\itemindent  \itemindent=.3in
  652. X% margin between end of table item and start of table text.
  653. X\newdimen\itemmargin  \itemmargin=.1in
  654. X
  655. X% used internally for \itemindent minus \itemmargin
  656. X\newdimen\itemmax
  657. X
  658. X% Note @table and @ftable define @item, @itemx, etc., with these defs.
  659. X% They also define \itemindex
  660. X% to index the item name in whatever manner is desired (perhaps none).
  661. X
  662. X\def\internalBitem{\smallbreak \parsearg\itemzzz}
  663. X\def\internalBitemx{\par \parsearg\itemzzz}
  664. X
  665. X\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
  666. X\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \par \parsearg\xitemzzz}
  667. X
  668. X\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
  669. X\def\internalBkitemx{\par \parsearg\kitemzzz}
  670. X
  671. X\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}\itemzzz {#1}}
  672. X
  673. X\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}\itemzzz {#1}}
  674. X
  675. X\def\itemzzz #1{\begingroup %
  676. X\advance \hsize by -\rightskip %
  677. X\advance \hsize by -\leftskip %
  678. X\setbox0=\hbox{\itemfont{#1}}%
  679. X\itemindex{#1}%
  680. X\parskip=0in %
  681. X\noindent %
  682. X\ifdim \wd0>\itemmax %
  683. X\vadjust{\penalty 10000}%
  684. X\hbox to \hsize{\hskip -\tableindent\box0\hss}\ %
  685. X\else %
  686. X\hbox to 0pt{\hskip -\tableindent\box0\hss}%
  687. X\fi %
  688. X\endgroup %
  689. X}
  690. X
  691. X\def\item{\errmessage{@item while not in a table}}
  692. X\def\itemx{\errmessage{@itemx while not in a table}}
  693. X\def\kitem{\errmessage{@kitem while not in a table}}
  694. X\def\kitemx{\errmessage{@kitemx while not in a table}}
  695. X\def\xitem{\errmessage{@xitem while not in a table}}
  696. X\def\xitemx{\errmessage{@xitemx while not in a table}}
  697. X
  698. X%% Contains a kludge to get @end[description] to work
  699. X\def\description{\tablez{\dontindex}{1}{}{}{}{}}
  700. X
  701. X\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
  702. X{\obeylines\obeyspaces%
  703. X\gdef\tablex #1^^M{%
  704. X\tabley\dontindex#1        \endtabley}}
  705. X
  706. X\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
  707. X{\obeylines\obeyspaces%
  708. X\gdef\ftablex #1^^M{%
  709. X\tabley\fnitemindex#1        \endtabley}}
  710. X
  711. X\def\dontindex #1{}
  712. X\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
  713. X
  714. X{\obeyspaces %
  715. X\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
  716. X\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
  717. X
  718. X\def\tablez #1#2#3#4#5#6{%
  719. X\aboveenvbreak %
  720. X\begingroup %
  721. X\def\Edescription{\Etable}% Neccessary kludge.
  722. X\let\itemindex=#1%
  723. X\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
  724. X\ifnum 0#4>0 \tableindent=#4\mil \fi %
  725. X\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
  726. X\def\itemfont{#2}%
  727. X\itemmax=\tableindent %
  728. X\advance \itemmax by -\itemmargin %
  729. X\advance \leftskip by \tableindent %
  730. X\parindent = 0pt
  731. X\parskip = \smallskipamount
  732. X\ifdim \parskip=0pt \parskip=2pt \fi%
  733. X\def\Etable{\endgraf\endgroup\afterenvbreak}%
  734. X\let\item = \internalBitem %
  735. X\let\itemx = \internalBitemx %
  736. X\let\kitem = \internalBkitem %
  737. X\let\kitemx = \internalBkitemx %
  738. X\let\xitem = \internalBxitem %
  739. X\let\xitemx = \internalBxitemx %
  740. X}
  741. X
  742. X% This is the counter used by @enumerate, which is really @itemize
  743. X
  744. X\newcount \itemno
  745. X
  746. X\def\itemize{\parsearg\itemizezzz}
  747. X
  748. X\def\itemizezzz #1{\itemizey {#1}{\Eitemize}}
  749. X
  750. X\def\itemizey #1#2{%
  751. X\aboveenvbreak %
  752. X\begingroup %
  753. X\itemno = 0 %
  754. X\itemmax=\itemindent %
  755. X\advance \itemmax by -\itemmargin %
  756. X\advance \leftskip by \itemindent %
  757. X\parindent = 0pt
  758. X\parskip = \smallskipamount
  759. X\ifdim \parskip=0pt \parskip=2pt \fi%
  760. X\def#2{\endgraf\endgroup\afterenvbreak}%
  761. X\def\itemcontents{#1}%
  762. X\let\item=\itemizeitem}
  763. X
  764. X\def\bullet{$\ptexbullet$}
  765. X\def\minus{$-$}
  766. X
  767. X\def\enumerate{\itemizey{\the\itemno.}\Eenumerate\flushcr}
  768. X
  769. X% Definition of @item while inside @itemize.
  770. X
  771. X\def\itemizeitem{%
  772. X\advance\itemno by 1
  773. X{\let\par=\endgraf \smallbreak}%
  774. X\ifhmode \errmessage{\in hmode at itemizeitem}\fi
  775. X{\parskip=0in \hskip 0pt
  776. X\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
  777. X\vadjust{\penalty 300}}%
  778. X\flushcr}
  779. X
  780. X\message{indexing,}
  781. X% Index generation facilities
  782. X
  783. X% Define \newwrite to be identical to plain tex's \newwrite
  784. X% except not \outer, so it can be used within \newindex.
  785. X{\catcode`\@=11
  786. X\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
  787. X
  788. X% \newindex {foo} defines an index named foo.
  789. X% It automatically defines \fooindex such that
  790. X% \fooindex ...rest of line... puts an entry in the index foo.
  791. X% It also defines \fooindfile to be the number of the output channel for
  792. X% the file that    accumulates this index.  The file's extension is foo.
  793. X% The name of an index should be no more than 2 characters long
  794. X% for the sake of vms.
  795. X
  796. X\def\newindex #1{
  797. X\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
  798. X\openout \csname#1indfile\endcsname \jobname.#1    % Open the file
  799. X\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
  800. X\noexpand\doindex {#1}}
  801. X}
  802. X
  803. X% @defindex foo  ==  \newindex{foo}
  804. X
  805. X\def\defindex{\parsearg\newindex}
  806. X
  807. X% Define @defcodeindex, like @defindex except put all entries in @code.
  808. X
  809. X\def\newcodeindex #1{
  810. X\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
  811. X\openout \csname#1indfile\endcsname \jobname.#1    % Open the file
  812. X\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
  813. X\noexpand\docodeindex {#1}}
  814. X}
  815. X
  816. X\def\defcodeindex{\parsearg\newcodeindex}
  817. X
  818. X% @synindex foo bar    makes index foo feed into index bar.
  819. X% Do this instead of @defindex foo if you don't want it as a separate index.
  820. X\def\synindex #1 #2 {%
  821. X\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
  822. X\noexpand\doindex {#2}}%
  823. X}
  824. X
  825. X% @syncodeindex foo bar   similar, but put all entries made for index foo
  826. X% inside @code.
  827. X\def\syncodeindex #1 #2 {%
  828. X\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
  829. X\noexpand\docodeindex {#2}}%
  830. X}
  831. X
  832. X% Define \doindex, the driver for all \fooindex macros.
  833. X% Argument #1 is generated by the calling \fooindex macro,
  834. X%  and it is "foo", the name of the index.
  835. X
  836. X% \doindex just uses \parsearg; it calls \doind for the actual work.
  837. X% This is because \doind is more useful to call from other macros.
  838. X
  839. X% There is also \dosubind {index}{topic}{subtopic}
  840. X% which makes an entry in a two-level index such as the operation index.
  841. X
  842. X\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
  843. X\def\singleindexer #1{\doind{\indexname}{#1}}
  844. X
  845. X% like the previous two, but they put @code around the argument.
  846. X\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
  847. X\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
  848. X
  849. X\def\indexdummies{%
  850. X\def\bf{\realbackslash bf }%
  851. X\def\rm{\realbackslash rm }%
  852. X\def\sl{\realbackslash sl }%
  853. X\def\dots{\realbackslash dots }%
  854. X\def\copyright{\realbackslash copyright }%
  855. X}
  856. X
  857. X% \indexnofonts no-ops all font-change commands.
  858. X% This is used when outputting the strings to sort the index by.
  859. X\def\indexdummyfont#1{#1}
  860. X\def\indexnofonts{%
  861. X\let\code=\indexdummyfont
  862. X\let\samp=\indexdummyfont
  863. X\let\kbd=\indexdummyfont
  864. X\let\key=\indexdummyfont
  865. X\let\var=\indexdummyfont
  866. X}
  867. X
  868. X% To define \realbackslash, we must make \ not be an escape.
  869. X% We must first make another character (@) an escape
  870. X% so we do not become unable to do a definition.
  871. X
  872. X{\catcode`\@=0 \catcode`\\=\other
  873. X@gdef@realbackslash{\}}
  874. X
  875. X\let\indexbackslash=0  %overridden during \printindex.
  876. X
  877. X\def\doind #1#2{%
  878. X{\indexdummies % Must do this here, since \bf, etc expand at this stage
  879. X\count10=\lastpenalty %
  880. X\escapechar=`\\%
  881. X{\let\folio=0% Expand all macros now EXCEPT \folio
  882. X\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
  883. X% so it will be output as is; and it will print as backslash in the indx.
  884. X%
  885. X% Now process the index-string once, with all font commands turned off,
  886. X% to get the string to sort the index by.
  887. X{\indexnofonts
  888. X\xdef\temp1{#2}%
  889. X}%
  890. X% Now produce the complete index entry.  We process the index-string again,
  891. X% this time with font commands expanded, to get what to print in the index.
  892. X\edef\temp{%
  893. X\write \csname#1indfile\endcsname{%
  894. X\realbackslash entry {\temp1}{\folio}{#2}}}%
  895. X\temp }%
  896. X\penalty\count10}}
  897. X
  898. X\def\dosubind #1#2#3{%
  899. X{\indexdummies % Must do this here, since \bf, etc expand at this stage
  900. X\count10=\lastpenalty %
  901. X\escapechar=`\\%
  902. X{\let\folio=0%
  903. X\def\rawbackslashxx{\indexbackslash}%
  904. X%
  905. X% Now process the index-string once, with all font commands turned off,
  906. X% to get the string to sort the index by.
  907. X{\indexnofonts
  908. X\xdef\temp1{#2 #3}%
  909. X}%
  910. X% Now produce the complete index entry.  We process the index-string again,
  911. X% this time with font commands expanded, to get what to print in the index.
  912. X\edef\temp{%
  913. X\write \csname#1indfile\endcsname{%
  914. X\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
  915. X\temp }%
  916. X\penalty\count10}}
  917. X
  918. X% The index entry written in the file actually looks like
  919. X%  \entry {sortstring}{page}{topic}
  920. X% or
  921. X%  \entry {sortstring}{page}{topic}{subtopic}
  922. X% The texindex program reads in these files and writes files
  923. X% containing these kinds of lines:
  924. X%  \initial {c}
  925. X%     before the first topic whose initial is c
  926. X%  \entry {topic}{pagelist}
  927. X%     for a topic that is used without subtopics
  928. X%  \primary {topic}
  929. X%     for the beginning of a topic that is used with subtopics
  930. X%  \secondary {subtopic}{pagelist}
  931. X%     for each subtopic.
  932. X
  933. X% Define the user-accessible indexing commands 
  934. X% @findex, @vindex, @kindex, @cindex.
  935. X
  936. X\def\findex {\fnindex}
  937. X\def\kindex {\kyindex}
  938. X\def\cindex {\cpindex}
  939. X\def\vindex {\vrindex}
  940. X\def\tindex {\tpindex}
  941. X\def\pindex {\pgindex}
  942. X
  943. X\def\cindexsub {\begingroup\obeylines\cindexsub}
  944. X{\obeylines %
  945. X\gdef\cindexsub "#1" #2^^M{\endgroup %
  946. X\dosubind{cp}{#2}{#1}}}
  947. X
  948. X% Define the macros used in formatting output of the sorted index material.
  949. X
  950. X% This is what you call to cause a particular index to get printed.
  951. X% Write
  952. X% @unnumbered Function Index
  953. X% @printindex fn
  954. X
  955. X\def\printindex{\parsearg\doprintindex}
  956. X
  957. X\def\doprintindex#1{\tex %
  958. X\catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
  959. X\catcode`\$=\other\catcode`\_=\other
  960. X\catcode`\~=\other
  961. X\def\indexbackslash{\rawbackslashxx}
  962. X\indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
  963. X\begindoublecolumns
  964. X\openin 1 \jobname.#1s
  965. X\ifeof 1 \else \closein 1 \input \jobname.#1s
  966. X\fi
  967. X\enddoublecolumns
  968. X\Etex}
  969. X
  970. X% These macros are used by the sorted index file itself.
  971. X% Change them to control the appearance of the index.
  972. X
  973. X% Same as \bigskipamount except no shrink.
  974. X% \balancecolumns gets confused if there is any shrink.
  975. X\newskip\initialskipamount \initialskipamount 12pt plus4pt
  976. X
  977. X\outer\def\initial #1{%
  978. X{\let\tentt=\sectt \let\sf=\sectt
  979. X\ifdim\lastskip<\initialskipamount
  980. X\removelastskip \penalty-200 \vskip \initialskipamount\fi
  981. X\line{\secbf#1\hfill}\kern 2pt\penalty3000}}
  982. X
  983. X\outer\def\entry #1#2{
  984. X{\parfillskip=0in \parskip=0in \parindent=0in
  985. X\hangindent=1in \hangafter=1%
  986. X\noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll #2\par
  987. X}}
  988. X
  989. X\def\primary #1{\line{#1\hfil}}
  990. X
  991. X\newskip\secondaryindent \secondaryindent=0.5cm
  992. X
  993. X\def\secondary #1#2{
  994. X{\parfillskip=0in \parskip=0in
  995. X\hangindent =1in \hangafter=1
  996. X\noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
  997. X}}
  998. X
  999. X%% Define two-column mode, which is used in indexes.
  1000. X%% Adapted from the TeXBook, page 416
  1001. X\catcode `\@=11
  1002. X
  1003. X\newbox\partialpage
  1004. X
  1005. X\newdimen\doublecolumnhsize  \doublecolumnhsize = 3.11in
  1006. X\newdimen\doublecolumnvsize  \doublecolumnvsize = 19.1in
  1007. X
  1008. X\def\begindoublecolumns{\begingroup
  1009. X  \output={\global\setbox\partialpage=\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}\eject
  1010. X  \output={\doublecolumnout} \hsize=\doublecolumnhsize \vsize=\doublecolumnvsize}
  1011. X\def\enddoublecolumns{\output={\balancecolumns}\eject
  1012. X  \endgroup \pagegoal=\vsize}
  1013. X
  1014. X\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
  1015. X  \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
  1016. X  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
  1017. X  \onepageout\pagesofar \unvbox255 \penalty\outputpenalty}
  1018. X\def\pagesofar{\unvbox\partialpage %
  1019. X  \hsize=\doublecolumnhsize % have to restore this since output routine
  1020. X%          changes it to set cropmarks (P. A. MacKay, 12 Nov. 1986)
  1021. X  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
  1022. X\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
  1023. X  \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
  1024. X  \divide\dimen@ by2 \splittopskip=\topskip
  1025. X  {\vbadness=10000 \loop \global\setbox3=\copy0
  1026. X    \global\setbox1=\vsplit3 to\dimen@
  1027. X    \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
  1028. X  \setbox0=\vbox to\dimen@{\unvbox1}  \setbox2=\vbox to\dimen@{\unvbox3}
  1029. X  \pagesofar}
  1030. X
  1031. X\catcode `\@=\other
  1032. X\message{sectioning,}
  1033. X% Define chapters, sections, etc.
  1034. X
  1035. X\newcount \chapno
  1036. X\newcount \secno
  1037. X\newcount \subsecno
  1038. X\newcount \subsubsecno
  1039. X
  1040. X% This counter is funny since it counts through charcodes of letters A, B, ...
  1041. X\newcount \appendixno  \appendixno = `\@
  1042. X\def\appendixletter{\char\the\appendixno}
  1043. X
  1044. X\newwrite \contentsfile
  1045. X\openout \contentsfile = \jobname.toc
  1046. X
  1047. X% Each @chapter defines this as the name of the chapter.
  1048. X% page headings and footings can use it.  @section does likewise
  1049. X
  1050. X\def\thischapter{} \def\thissection{}
  1051. X\def\seccheck#1{\if \pageno<0 %
  1052. X\errmessage{@#1 not allowed after generating table of contents}\fi
  1053. X%
  1054. X}
  1055. X
  1056. X\outer\def\chapter{\parsearg\chapterzzz}
  1057. X\def\chapterzzz #1{\seccheck{chapter}%
  1058. X\secno=0 \subsecno=0 \subsubsecno=0 \global\advance \chapno by 1 \message{Chapter \the\chapno}%
  1059. X\chapmacro {#1}{\the\chapno}%
  1060. X\gdef\thissection{#1}\gdef\thischapter{#1}%
  1061. X\let\rawbackslash=\relax%
  1062. X\let\frenchspacing=\relax%
  1063. X\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
  1064. X\escapechar=`\\%
  1065. X\write \contentsfile \temp  %
  1066. X\donoderef %
  1067. X}
  1068. X
  1069. X\outer\def\appendix{\parsearg\appendixzzz}
  1070. X\def\appendixzzz #1{\seccheck{appendix}%
  1071. X\secno=0 \subsecno=0 \subsubsecno=0 \global\advance \appendixno by 1 \message{Appendix \appendixletter}%
  1072. X\chapmacro {#1}{Appendix \appendixletter}%
  1073. X\gdef\thischapter{#1}\gdef\thissection{#1}%
  1074. X\let\rawbackslash=\relax%
  1075. X\let\frenchspacing=\relax%
  1076. X\edef\temp{{\realbackslash chapentry {#1}{Appendix \appendixletter}{\noexpand\folio}}}%
  1077. X\escapechar=`\\%
  1078. X\write \contentsfile \temp  %
  1079. X\unnumbnoderef %
  1080. X}
  1081. X
  1082. X\outer\def\unnumbered{\parsearg\unnumberedzzz}
  1083. X\def\unnumberedzzz #1{\seccheck{unnumbered}%
  1084. X\secno=0 \subsecno=0 \subsubsecno=0 \message{(#1)}
  1085. X\unnumbchapmacro {#1}%
  1086. X\gdef\thischapter{#1}\gdef\thissection{#1}%
  1087. X\let\rawbackslash=\relax%
  1088. X\let\frenchspacing=\relax%
  1089. X\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
  1090. X\escapechar=`\\%
  1091. X\write \contentsfile \temp  %
  1092. X\unnumbnoderef %
  1093. X}
  1094. X
  1095. X\outer\def\section{\parsearg\sectionzzz}
  1096. X\def\sectionzzz #1{\seccheck{section}%
  1097. X\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
  1098. X\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
  1099. X\let\rawbackslash=\relax%
  1100. X\let\frenchspacing=\relax%
  1101. X\edef\temp{{\realbackslash secentry %
  1102. X{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
  1103. X\escapechar=`\\%
  1104. X\write \contentsfile \temp %
  1105. X\donoderef %
  1106. X\penalty 10000 %
  1107. X}
  1108. X
  1109. X\outer\def\appendixsection{\parsearg\appendixsectionzzz}
  1110. X\outer\def\appendixsec{\parsearg\appendixsectionzzz}
  1111. X\def\appendixsectionzzz #1{\seccheck{appendixsection}%
  1112. X\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
  1113. X\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
  1114. X\let\rawbackslash=\relax%
  1115. X\let\frenchspacing=\relax%
  1116. X\edef\temp{{\realbackslash secentry %
  1117. X{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
  1118. X\escapechar=`\\%
  1119. X\write \contentsfile \temp %
  1120. X\unnumbnoderef %
  1121. X\penalty 10000 %
  1122. X}
  1123. X
  1124. X\outer\def\unnumberedsec{\parsearg\unnumberedseczzz}
  1125. X\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
  1126. X\plainsecheading {#1}\gdef\thissection{#1}%
  1127. X\let\rawbackslash=\relax%
  1128. X\let\frenchspacing=\relax%
  1129. X\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
  1130. X\escapechar=`\\%
  1131. X\write \contentsfile \temp %
  1132. X\unnumbnoderef %
  1133. X\penalty 10000 %
  1134. X}
  1135. X
  1136. X\outer\def\subsection{\parsearg\subsectionzzz}
  1137. X\def\subsectionzzz #1{\seccheck{subsection}%
  1138. X\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
  1139. X\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
  1140. X\let\rawbackslash=\relax%
  1141. X\let\frenchspacing=\relax%
  1142. X\edef\temp{{\realbackslash subsecentry %
  1143. X{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
  1144. X\escapechar=`\\%
  1145. X\write \contentsfile \temp %
  1146. X\donoderef %
  1147. X\penalty 10000 %
  1148. X}
  1149. X
  1150. X\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}
  1151. X\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
  1152. X\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
  1153. X\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
  1154. X\let\rawbackslash=\relax%
  1155. X\let\frenchspacing=\relax%
  1156. X\edef\temp{{\realbackslash subsecentry %
  1157. X{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
  1158. X\escapechar=`\\%
  1159. X\write \contentsfile \temp %
  1160. X\unnumbnoderef %
  1161. X\penalty 10000 %
  1162. X}
  1163. X
  1164. X\outer\def\unnumberedsubsec{\parsearg\unnumberedsubseczzz}
  1165. X\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
  1166. X\plainsecheading {#1}\gdef\thissection{#1}%
  1167. X\let\rawbackslash=\relax%
  1168. X\let\frenchspacing=\relax%
  1169. X\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
  1170. X\escapechar=`\\%
  1171. X\write \contentsfile \temp %
  1172. X\unnumbnoderef %
  1173. X\penalty 10000 %
  1174. X}
  1175. X
  1176. X\outer\def\subsubsection{\parsearg\subsubsectionzzz}
  1177. X\def\subsubsectionzzz #1{\seccheck{subsubsection}%
  1178. X\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
  1179. X\subsubsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
  1180. X\let\rawbackslash=\relax%
  1181. X\let\frenchspacing=\relax%
  1182. X\edef\temp{{\realbackslash subsubsecentry %
  1183. X{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%\
  1184. X\escapechar=`\\%
  1185. X\write \contentsfile \temp %
  1186. X\donoderef %
  1187. X\penalty 10000 %
  1188. X}
  1189. X
  1190. X\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}
  1191. X\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
  1192. X\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
  1193. X\subsubsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
  1194. X\let\rawbackslash=\relax%
  1195. X\let\frenchspacing=\relax%
  1196. X\edef\temp{{\realbackslash subsubsecentry{#1}%
  1197. X{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%\
  1198. X\escapechar=`\\%
  1199. X\write \contentsfile \temp %
  1200. X\unnumbnoderef %
  1201. X\penalty 10000 %
  1202. X}
  1203. X
  1204. X\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
  1205. X\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
  1206. X\plainsecheading {#1}\gdef\thissection{#1}%
  1207. X\let\rawbackslash=\relax%
  1208. X\let\frenchspacing=\relax%
  1209. X\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
  1210. X\escapechar=`\\%
  1211. X\write \contentsfile \temp %
  1212. X\unnumbnoderef %
  1213. X\penalty 10000 %
  1214. X}
  1215. X
  1216. X% Define @majorheading, @heading and @subheading
  1217. X
  1218. X\outer\def\majorheading #1{%
  1219. X{\advance\chapheadingskip by 10pt \chapbreak }%
  1220. X{\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 200}
  1221. X
  1222. X\outer\def\chapheading #1{\chapbreak %
  1223. X{\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 200}
  1224. X
  1225. X\let\heading=\secheadingi
  1226. X\let\subheading=\subsecheadingi
  1227. X\let\subsubheading=\subsubsecheadingi
  1228. X
  1229. X% These macros generate a chapter, section, etc. heading only
  1230. X% (including whitespace, linebreaking, etc. around it),
  1231. X% given all the information in convenient, parsed form.
  1232. X
  1233. X%%% Args are the skip and penalty (usually negative)
  1234. X\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
  1235. X
  1236. X\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
  1237. X
  1238. X%%% Define plain chapter starts, and page on/off switching for it
  1239. X% Parameter controlling skip before chapter headings (if needed)
  1240. X
  1241. X\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
  1242. X
  1243. X\def\chapbreak{\dobreak \chapheadingskip {-4000}}
  1244. X\def\chappager{\par\vfill\supereject}
  1245. X\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
  1246. X
  1247. X\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
  1248. X
  1249. X\def\CHAPPAGoff{
  1250. X\global\let\pchapsepmacro=\chapbreak
  1251. X\global\let\pagealignmacro=\chappager}
  1252. X
  1253. X\def\CHAPPAGon{
  1254. X\global\let\pchapsepmacro=\chappager
  1255. X\global\let\pagealignmacro=\chappager}
  1256. X
  1257. X\def\CHAPPAGodd{
  1258. X\global\let\pchapsepmacro=\chapoddpage
  1259. X\global\let\pagealignmacro=\chapoddpage}
  1260. X
  1261. X\CHAPPAGon
  1262. X
  1263. X\def\CHAPFplain{
  1264. X\global\let\chapmacro=\chfplain
  1265. X\global\let\unnumbchapmacro=\unnchfplain}
  1266. X
  1267. X\def\chfplain #1#2{%
  1268. X\pchapsepmacro %
  1269. X{\chapfonts \line{\chaprm #2.\enspace #1\hfill}}\bigskip \par\penalty 5000 %
  1270. X}
  1271. X
  1272. X\def\unnchfplain #1{%
  1273. X\pchapsepmacro %
  1274. X{\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 10000 %
  1275. X}
  1276. X\CHAPFplain % The default
  1277. X
  1278. X\def\unnchfopen #1{%
  1279. X\chapoddpage {\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 10000 %
  1280. X}
  1281. X
  1282. X\def\chfopen #1#2{\chapoddpage {\chapfonts
  1283. X\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
  1284. X\par\penalty 5000 %
  1285. X}
  1286. X
  1287. X\def\CHAPFopen{
  1288. X\global\let\chapmacro=\chfopen
  1289. X\global\let\unnumbchapmacro=\unnchfopen}
  1290. X
  1291. X% Parameter controlling skip before section headings.
  1292. X
  1293. X\newskip \subsecheadingskip  \subsecheadingskip = 17pt plus 8pt minus 4pt
  1294. X\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
  1295. X
  1296. X\newskip \secheadingskip  \secheadingskip = 21pt plus 8pt minus 4pt
  1297. X\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
  1298. X
  1299. X\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}}
  1300. X\def\plainsecheading #1{\secheadingi {#1}}
  1301. X\def\secheadingi #1{{\advance \secheadingskip by \parskip %
  1302. X\secheadingbreak}%
  1303. X{\secfonts \line{\secrm #1\hfill}}%
  1304. X\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
  1305. X
  1306. X\def\subsecheading #1#2#3#4{{\advance \subsecheadingskip by \parskip %
  1307. X\subsecheadingbreak}%
  1308. X{\secfonts \line{\secrm#2.#3.#4\enspace #1\hfill}}%
  1309. X\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
  1310. X
  1311. X\def\subsubsecfonts{\subsecfonts} % Maybe this should change
  1312. X
  1313. X\def\subsubsecheading #1#2#3#4#5{{\advance \subsecheadingskip by \parskip %
  1314. X\subsecheadingbreak}%
  1315. X{\secfonts \line{\secrm#2.#3.#4.#5\enspace #1\hfill}}%
  1316. X\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
  1317. X
  1318. X\message{toc printing,}
  1319. X
  1320. X\def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros
  1321. X
  1322. X\def\finishcontents{%
  1323. X\ifnum\pageno>0 %
  1324. X\pagealignmacro %
  1325. X\immediate\closeout \contentsfile%
  1326. X\pageno=-1        % Request roman numbered pages
  1327. X\fi}
  1328. X
  1329. X\outer\def\contents{%
  1330. X\finishcontents %
  1331. X\unnumbchapmacro{Table of Contents}
  1332. X\def\thischapter{Table of Contents}
  1333. X{\catcode`\\=0
  1334. X\catcode`\{=1        % Set up to handle contents files properly
  1335. X\catcode`\}=2
  1336. X\catcode`\@=11
  1337. X\input \jobname.toc
  1338. X}
  1339. X\vfill \eject}
  1340. X
  1341. X\outer\def\summarycontents{%
  1342. X\finishcontents %
  1343. X\unnumbchapmacro{Summary Table of Contents}
  1344. X\def\thischapter{Summary Table of Contents}
  1345. X{\catcode`\\=0
  1346. X\catcode`\{=1        % Set up to handle contents files properly
  1347. X\catcode`\}=2
  1348. X\catcode`\@=11
  1349. X\def\smallbreak{}
  1350. X\def\secentry ##1##2##3##4{}
  1351. X\def\subsecentry ##1##2##3##4##5{}
  1352. X\def\subsubsecentry ##1##2##3##4##5##6{}
  1353. X\def\unnumbsecentry ##1##2{}
  1354. X\def\unnumbsubsecentry ##1##2{}
  1355. X\def\unnumbsubsubsecentry ##1##2{}
  1356. X\let\medbreak=\smallbreak
  1357. X\input \jobname.toc
  1358. X}
  1359. X\vfill \eject}
  1360. X
  1361. X\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
  1362. X
  1363. X% These macros generate individual entries in the table of contents
  1364. X% The first argument is the chapter or section name.
  1365. X% The last argument is the page number.
  1366. X% The arguments in between are the chapter number, section number, ...
  1367. X
  1368. X\def\chapentry #1#2#3{%
  1369. X\medbreak
  1370. X\line{#2.\space#1\leaders\hbox to 1em{\hss.\hss}\hfill #3}
  1371. X}
  1372. X
  1373. X\def\unnumbchapentry #1#2{%
  1374. X\medbreak
  1375. X\line{#1\leaders\Dotsbox\hfill #2}
  1376. X}
  1377. X
  1378. X\def\secentry #1#2#3#4{%
  1379. X\line{\enspace\enspace#2.#3\space#1\leaders\Dotsbox\hfill#4}
  1380. X}
  1381. X
  1382. X\def\unnumbsecentry #1#2{%
  1383. X\line{\enspace\enspace#1\leaders\Dotsbox\hfill #2}
  1384. X}
  1385. X
  1386. X\def\subsecentry #1#2#3#4#5{%
  1387. X\line{\enspace\enspace\enspace\enspace
  1388. X#2.#3.#4\space#1\leaders\Dotsbox\hfill #5}
  1389. X}
  1390. X
  1391. X\def\unnumbsubsecentry #1#2{%
  1392. X\line{\enspace\enspace\enspace\enspace#1\leaders\Dotsbox\hfill #2}
  1393. X}
  1394. X
  1395. X\def\subsubsecentry #1#2#3#4#5#6{%
  1396. X\line{\enspace\enspace\enspace\enspace\enspace\enspace
  1397. X#2.#3.#4.#5\space#1\leaders\Dotsbox\hfill #6}
  1398. X}
  1399. X
  1400. X\def\unnumbsubsubsecentry #1#2{%
  1401. X\line{\enspace\enspace\enspace\enspace\enspace\enspace#1\leaders\Dotsbox\hfill #2}
  1402. X}
  1403. X
  1404. X\message{environments,}
  1405. X
  1406. X% @tex ... @end tex    escapes into raw Tex temporarily.
  1407. X% One exception: @ is still an escape character, so that @end tex works.
  1408. X% But \@ or @@ will get a plain tex @ character.
  1409. X
  1410. X\def\tex{\begingroup
  1411. X\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
  1412. X\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
  1413. X\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
  1414. X\catcode `\%=14
  1415. X\catcode`\"=12
  1416. X\catcode`\|=12
  1417. X\catcode`\<=12
  1418. X\catcode`\>=12
  1419. X\escapechar=`\\
  1420. X%
  1421. X\let\{=\ptexlbrace
  1422. X\let\}=\ptexrbrace
  1423. X\let\.=\ptexdot
  1424. X\let\*=\ptexstar
  1425. X\def\@={@}%
  1426. X\let\bullet=\ptexbullet
  1427. X\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
  1428. X\let\L=\ptexL
  1429. X%
  1430. X\let\Etex=\endgroup}
  1431. X
  1432. X% Define @lisp ... @endlisp.
  1433. X% @lisp does a \begingroup so it can rebind things,
  1434. X% including the definition of @endlisp (which normally is erroneous).
  1435. X
  1436. X% Amount to narrow the margins by for @lisp.
  1437. X\newskip\lispnarrowing \lispnarrowing=0.4in
  1438. X
  1439. X% This is the definition that ^M gets inside @lisp
  1440. X% phr: changed space to \null, to avoid overfull hbox problems.
  1441. X{\obeyspaces%
  1442. X\gdef\lisppar{\null\endgraf}}
  1443. X
  1444. X% Cause \obeyspaces to make each Space cause a word-separation
  1445. X% rather than the default which is that it acts punctuation.
  1446. X% This is because space in tt font looks funny.
  1447. X{\obeyspaces %
  1448. X\gdef\sepspaces{\def {\ }}}
  1449. X
  1450. X\newskip\aboveenvskipamount \aboveenvskipamount= 0pt
  1451. X\def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip
  1452. X\endgraf \ifdim\lastskip<\aboveenvskipamount
  1453. X\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}}
  1454. X
  1455. X\def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount
  1456. X\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}
  1457. X
  1458. X\def\lisp{\aboveenvbreak\begingroup\inENV %This group ends at the end of the @lisp body
  1459. X\hfuzz=12truept % Don't be fussy
  1460. X% Make spaces be word-separators rather than space tokens.
  1461. X\sepspaces %
  1462. X% Single space lines
  1463. X\singlespace %
  1464. X% The following causes blank lines not to be ignored
  1465. X% by adding a space to the end of each line.
  1466. X\let\par=\lisppar
  1467. X\def\Elisp{\endgroup\afterenvbreak}%
  1468. X\parskip=0pt \advance \rightskip by \lispnarrowing 
  1469. X\advance \leftskip by \lispnarrowing
  1470. X\parindent=0pt
  1471. X\let\exdent=\internalexdent
  1472. X\obeyspaces \obeylines \tt \rawbackslash
  1473. X\def\next##1{}\next}
  1474. X
  1475. X
  1476. X\let\example=\lisp
  1477. X\def\Eexample{\Elisp}
  1478. X
  1479. X\let\smallexample=\lisp
  1480. X\def\Esmallexample{\Elisp}
  1481. X
  1482. X% Macro for 9 pt. examples, necessary to print with 5" lines.
  1483. X% From Pavel@xerox.  This is not really used unless the
  1484. X% @smallbook command is given.
  1485. X
  1486. X\def\smalllispx{\aboveenvbreak\begingroup\inENV
  1487. X%            This group ends at the end of the @lisp body
  1488. X\hfuzz=12truept % Don't be fussy
  1489. X% Make spaces be word-separators rather than space tokens.
  1490. X\sepspaces %
  1491. X% Single space lines
  1492. X\singlespace %
  1493. X% The following causes blank lines not to be ignored
  1494. X% by adding a space to the end of each line.
  1495. X\let\par=\lisppar
  1496. X\def\Esmalllisp{\endgroup\afterenvbreak}%
  1497. X\parskip=0pt \advance \rightskip by \lispnarrowing 
  1498. X\advance \leftskip by \lispnarrowing
  1499. X\parindent=0pt
  1500. X\let\exdent=\internalexdent
  1501. X\obeyspaces \obeylines \ninett \rawbackslash
  1502. X\def\next##1{}\next}
  1503. X
  1504. X% This is @display; same as @lisp except use roman font.
  1505. X
  1506. X\def\display{\begingroup\inENV %This group ends at the end of the @display body
  1507. X\aboveenvbreak
  1508. X% Make spaces be word-separators rather than space tokens.
  1509. X\sepspaces %
  1510. X% Single space lines
  1511. X\singlespace %
  1512. X% The following causes blank lines not to be ignored
  1513. X% by adding a space to the end of each line.
  1514. X\let\par=\lisppar
  1515. X\def\Edisplay{\endgroup\afterenvbreak}%
  1516. X\parskip=0pt \advance \rightskip by \lispnarrowing 
  1517. X\advance \leftskip by \lispnarrowing
  1518. X\parindent=0pt
  1519. X\let\exdent=\internalexdent
  1520. X\obeyspaces \obeylines
  1521. X\def\next##1{}\next}
  1522. X
  1523. X% This is @format; same as @lisp except use roman font and don't narrow margins
  1524. X
  1525. X\def\format{\begingroup\inENV %This group ends at the end of the @format body
  1526. X\aboveenvbreak
  1527. X% Make spaces be word-separators rather than space tokens.
  1528. X\sepspaces %
  1529. X\singlespace %
  1530. X% The following causes blank lines not to be ignored
  1531. X% by adding a space to the end of each line.
  1532. X\let\par=\lisppar
  1533. X\def\Eformat{\endgroup\afterenvbreak}
  1534. X\parskip=0pt \parindent=0pt
  1535. X\obeyspaces \obeylines
  1536. X\def\next##1{}\next}
  1537. X
  1538. X% @flushleft and @flushright
  1539. X
  1540. X\def\flushleft{\begingroup\inENV %This group ends at the end of the @format body
  1541. X\aboveenvbreak
  1542. X% Make spaces be word-separators rather than space tokens.
  1543. X\sepspaces %
  1544. X% The following causes blank lines not to be ignored
  1545. X% by adding a space to the end of each line.
  1546. X% This also causes @ to work when the directive name
  1547. X% is terminated by end of line.
  1548. X\let\par=\lisppar
  1549. X\def\Eflushleft{\endgroup\afterenvbreak}%
  1550. X\parskip=0pt \parindent=0pt
  1551. X\obeyspaces \obeylines
  1552. X\def\next##1{}\next}
  1553. X
  1554. X\def\flushright{\begingroup\inENV %This group ends at the end of the @format body
  1555. X\aboveenvbreak
  1556. X% Make spaces be word-separators rather than space tokens.
  1557. X\sepspaces %
  1558. X% The following causes blank lines not to be ignored
  1559. X% by adding a space to the end of each line.
  1560. X% This also causes @ to work when the directive name
  1561. X% is terminated by end of line.
  1562. X\let\par=\lisppar
  1563. X\def\Eflushright{\endgroup\afterenvbreak}%
  1564. X\parskip=0pt \parindent=0pt
  1565. X\advance \leftskip by 0pt plus 1fill
  1566. X\obeyspaces \obeylines
  1567. X\def\next##1{}\next}
  1568. X
  1569. X% @quotation - narrow the margins.
  1570. X
  1571. END_OF_FILE
  1572. if test 49773 -ne `wc -c <'texinfo.tex.1'`; then
  1573.     echo shar: \"'texinfo.tex.1'\" unpacked with wrong size!
  1574. fi
  1575. # end of 'texinfo.tex.1'
  1576. fi
  1577. echo shar: End of archive 3 \(of 3\).
  1578. cp /dev/null ark3isdone
  1579. MISSING=""
  1580. for I in 1 2 3 ; do
  1581.     if test ! -f ark${I}isdone ; then
  1582.     MISSING="${MISSING} ${I}"
  1583.     fi
  1584. done
  1585. if test "${MISSING}" = "" ; then
  1586.     echo You have unpacked all 3 archives.
  1587.     rm -f ark[1-9]isdone
  1588. else
  1589.     echo You still need to unpack the following archives:
  1590.     echo "        " ${MISSING}
  1591. fi
  1592. ##  End of shell archive.
  1593. exit 0
  1594. exit 0 # Just in case...
  1595.